import { defineStore } from "pinia"; //引入pinia
// _setLocalItem 封装的缓存本地的方法 remove和get分别对应缓存的删除和获取
import { _getLocalItem, _setLocalItem } from "@/utils/tools";

// 本地数据加密解密
import aes from "../utils/aes";
import { reactive } from "vue";
type Tag = {
  id: number;
  value: string;
};
// 选项式
export const user = defineStore("user", {
  persist: true,
  state: () => {
    return {
      headPic: "" as string,
      userInfo: "" as string,
      token: "" as string,
      infoFlag: false as boolean,
      tokenFlag: true as boolean,
      showLogin: false as boolean,
    };
  },
  getters: {
    getHeadPic(): string {
      return this.headPic;
    },
    getUserInfo(): any {
      try {
        return this.infoFlag ? JSON.parse(aes.aesDecrypt(this.userInfo)) : {};
      } catch (err) {
        console.error(err);
        clearUserInfo();
      }
    },
    // 获取token
    getToken(): boolean | void {
      try {
        return this.tokenFlag ? aes.aesDecrypt(this.token) : "";
      } catch (err) {
        console.error(err);
        clearUserInfo();
      }
    },
    getShowLogin(): boolean {
      return this.showLogin;
    },
  },
  actions: {
    // 设置头像
    setHeadPic(avatar: string) {
      this.headPic = avatar;
    },
    // 设置用户信息
    setUserInfo(userInfo: any) {
      this.infoFlag = true;
      this.userInfo = aes.aesEncrypt(userInfo);
    },
    // 设置token
    setToken(token: string) {
      this.tokenFlag = true;
      this.token = aes.aesEncrypt(token);
    },
    // 清除用户信息
    clearUserInfo():void {
      this.userInfo = "";
      this.token = "";
      this.tokenFlag = false;
      this.infoFlag = false;
    },
    setShowLogin(val: any) {
      this.showLogin = val;
    },
  },
});

// 分类和标签
export const tagCategory = defineStore(
  "data",
  () => {
    const data = reactive<{tagList:Tag[], categoryList:Tag[]}>({
      tagList: [],
      categoryList: []
    });
    const getTagList = () => {
      return data.tagList;
    };
    const getCategoryList = () => {
      return data.categoryList;
    };
    const setTagList = (list: Tag[]) => {
      data.tagList = list;
    };
    const setCategoryList = (list: Tag[]) => {
      data.categoryList = list;
    };
    return {
      data,
      getTagList,
      getCategoryList,
      setTagList,
      setCategoryList
    };
  },
  {
    persist: true,
  }
);

// export const user = defineStore(
//   "user",
//   () => {
//   // id: 0,
//   // username: '',
//   // nickName: '',
//   // email: '',
//   // phoneNumber: null,
//   // headPic: '',
//   // createTime: 1734973850368,
//   // isFrozen: 0,
//   // isAdmin: false,
//   // roles: [],
//   // permissions: []
//     const userInfo = ref<string>("");
//     const token = ref<string>("");
//     const infoFlag = ref<boolean>(false);
//     const tokenFlag = ref<boolean>(false);
//     const showLogin = ref<boolean>(false);
//     // 清除用户信息
//     const clearUserInfo = () => {
//       userInfo.value = "";
//       token.value = "";
//       tokenFlag.value = false;
//       infoFlag.value = false;
//     }
//     const getHeadPic = () => {
//       try {
//         const userInfos = infoFlag.value ? JSON.parse(aes.aesDecrypt(userInfo.value)) : {};
//         return userInfos.headPic;
//       } catch (err) {
//         console.error(err);
//         clearUserInfo();
//       }
//     }
//     function getUserInfo() {
//       try {
//         return infoFlag.value ? JSON.parse(aes.aesDecrypt(userInfo.value)) : {};
//       } catch (err) {
//         console.error(err);
//         clearUserInfo();
//       }
//     }
//     // 获取token
//     const getToken = () => {
//       try {
//         return tokenFlag.value ? aes.aesDecrypt(token.value) : "";
//       } catch (err) {
//         console.error(err);
//         clearUserInfo();
//       }
//     }
//     const getShowLogin= () => {
//       return showLogin;
//     }
//     // 设置用户信息
//     const setUserInfo = (userInfo: any) => {
//       infoFlag.value = true;
//       userInfo.value = aes.aesEncrypt(userInfo);
//     }
//     // 设置token
//     const setToken = (token: string) => {
//       tokenFlag.value = true;
//       token = aes.aesEncrypt(token);
//     }
//     const setShowLogin = (val: any) => {
//       showLogin.value = val;
//     }
//     return {
//       userInfo,
//       token,
//       infoFlag,
//       tokenFlag,
//       showLogin,
//       getHeadPic,
//       getUserInfo,
//       getToken,
//       getShowLogin,
//       setUserInfo,
//       setToken,
//       clearUserInfo,
//       setShowLogin
//     }
//   },
//   {
//     persist: true,
//   }
// );
